论List 集合的深拷贝和浅拷贝,这个课题我们得用 java的 栈堆来说明,
- 遍历循环复制
1 | List<Person> destList=new ArrayList<Person>(srcList.size()); |
tips:list 本质上是数组,也是通过引用指向对应的数组(数据)
- 使用List实现类的构造方法
1 | List<Person> destList=new ArrayList<Person>(srcList); |
- 使用list.addAll()方法
1 | List<Person> destList=new ArrayList<Person>(); |
tips: list.remove() 只是删除了 list 和数组 部分数据的联系 对数据本身并不影响。
例如: list1.remove() 了,但是list2 不受影响。
- 使用System.arraycopy()方法
1 | Person[] srcPersons=srcList.toArray(new Person[0]); |
tips: 实际上是 copy了 单个数组数据的地址引用
以上是浅拷贝
图解深拷贝
深拷贝就是 把 list1 的内容(数据) copy 给 list2 , list1 和 list2 指向不同的数据
- 使用序列化方法
1 | public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException { |
- clone方法
1 | public class A implements Cloneable { |